package br.siseventos.managed;

import br.siseventos.model.*;
import br.siseventos.service.*;
import br.siseventos.view.util.CallbackHelper;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;
import org.primefaces.event.FlowEvent;

@ManagedBean(name = "novoEventoTesteBean")
@ViewScoped
public class NovoEventoTeste extends BaseBean {
    // Campos que carregam os componentes

    private TbEvento evento = new TbEvento();
    private List<TbRecurso> recursosDisponiveis = new ArrayList<TbRecurso>();
    private List<TbRecurso> recursosAlocados = new ArrayList<TbRecurso>();
    private List<TbServico> servicosDisponiveis = new ArrayList<TbServico>();
    private List<TbServico> servicosAlocados = new ArrayList<TbServico>();
    private List<TbPublico> publicos = new ArrayList<TbPublico>();
    private List<TbAtividade> atividades = new ArrayList<TbAtividade>();
    
    // Campos diversos
    private TbAtividade atividadeAdicionada = new TbAtividade();
    private TbServico servicoAdicionado = new TbServico();
    private TbRecurso recursoAdicionado = new TbRecurso();
    private int quantidadeRecursoAdicionado = 0;
    private Date today = new Date();
    
    // Services
    private EventoService eventoService;
    private RecursoService recursoService;
    private ServicoService servicoService;
    private TipoEventoService tipoEventoService;
    private TipoRecursoService tipoRecursoService;
    private PublicoService publicoService;
    private TipoAtividadeService tipoAtividadeService;

    // Construtor
    public NovoEventoTeste() {
        model();
    }

    // Component Listeners
    public String onWizardFlow(FlowEvent flowEvent) {
        String nextStep = flowEvent.getNewStep();
        if(nextStep.compareTo("tabDadosEvento") == 0)
        {
            
        }
        else if(nextStep.compareTo("tabAtividades") == 0)
        {
            
        }
        return nextStep;
    }

    // Action Listeners
    
    // Actions
    public void adicionarAtividade(ActionEvent e){
        // Adicionando a atividade na lista de atividades
        atividades.add(atividadeAdicionada);
        
        // Limpando a atividade
        atividadeAdicionada = new TbAtividade();
        
        // Adicionando os parametros de callback
        CallbackHelper.addCallback("key", "fecharDlgAtividade");
    }
    
    // Getters
    public TbEvento getEvento() {
        return evento;
    }

    public void setEvento(TbEvento evento) {
        this.evento = evento;
    }

    public List<TbPublico> getPublicos() {
        return publicos;
    }

    public void setPublicos(List<TbPublico> publicos) {
        this.publicos = publicos;
    }

    public int getQuantidadeRecursoAdicionado() {
        return quantidadeRecursoAdicionado;
    }

    public void setQuantidadeRecursoAdicionado(int quantidadeRecursoAdicionado) {
        this.quantidadeRecursoAdicionado = quantidadeRecursoAdicionado;
    }

    public TbRecurso getRecursoAdicionado() {
        return recursoAdicionado;
    }

    public void setRecursoAdicionado(TbRecurso recursoAdicionado) {
        this.recursoAdicionado = recursoAdicionado;
    }

    public List<TbRecurso> getRecursosAlocados() {
        return recursosAlocados;
    }

    public void setRecursosAlocados(List<TbRecurso> recursosAlocados) {
        this.recursosAlocados = recursosAlocados;
    }

    public List<TbRecurso> getRecursosDisponiveis() {
        return recursosDisponiveis;
    }

    public void setRecursosDisponiveis(List<TbRecurso> recursosDisponiveis) {
        this.recursosDisponiveis = recursosDisponiveis;
    }

    public TbServico getServicoAdicionado() {
        return servicoAdicionado;
    }

    public void setServicoAdicionado(TbServico servicoAdicionado) {
        this.servicoAdicionado = servicoAdicionado;
    }

    public List<TbServico> getServicosAlocados() {
        return servicosAlocados;
    }

    public void setServicosAlocados(List<TbServico> servicosAlocados) {
        this.servicosAlocados = servicosAlocados;
    }

    public List<TbServico> getServicosDisponiveis() {
        return servicosDisponiveis;
    }

    public void setServicosDisponiveis(List<TbServico> servicosDisponiveis) {
        this.servicosDisponiveis = servicosDisponiveis;
    }

    public List<TbAtividade> getAtividades() {
        return atividades;
    }

    public void setAtividades(List<TbAtividade> atividades) {
        this.atividades = atividades;
    }

    public TbAtividade getAtividadeAdicionada() {
        return atividadeAdicionada;
    }

    public void setAtividadeAdicionada(TbAtividade atividadeAdicionada) {
        this.atividadeAdicionada = atividadeAdicionada;
    }

    public Date getToday() {
        return today;
    }

    
    // Static Getters
    public List<TdTipoEvento> getTiposEvento() {
        List<TdTipoEvento> tipos = new ArrayList<TdTipoEvento>();
        try {
            tipos = getTipoEventoService().consultarTodos();
        } catch (Exception e) {
        }
        return tipos;
    }

    public List<TbPublico> getListaPublicos() {
        List<TbPublico> lista = null;
        try {
            lista = getPublicoService().consultarTodos();
        } catch (Exception e) {
        }
        return lista;
    }
    public List<TdTipoAtividade> getTiposAtividades() {
        List<TdTipoAtividade> lista = null;
        try {
            lista = getTipoAtividadeService().consultarTodos();
        } catch (Exception e) {
        }
        return lista;
    }
    
    public boolean getShowDataTableAtividades(){
        return atividades.size() > 0;
    }
    
    public TbAtividade getNovaAtividade(){
        return new TbAtividade();
    }
    // Getters (Lazy Loading Services)
    public EventoService getEventoService() {
        if (eventoService == null) {
            eventoService = new EventoService();
        }
        return eventoService;
    }

    public RecursoService getRecursoService() {
        if (recursoService == null) {
            recursoService = new RecursoService();
        }
        return recursoService;
    }

    public ServicoService getServicoService() {
        if (servicoService == null) {
            servicoService = new ServicoService();
        }
        return servicoService;
    }

    public TipoEventoService getTipoEventoService() {
        if (tipoEventoService == null) {
            tipoEventoService = new TipoEventoService();
        }
        return tipoEventoService;
    }

    public TipoRecursoService getTipoRecursoService() {
        if (tipoRecursoService == null) {
            tipoRecursoService = new TipoRecursoService();
        }
        return tipoRecursoService;
    }

    public PublicoService getPublicoService() {
        if (publicoService == null) {
            publicoService = new PublicoService();
        }
        return publicoService;
    }
    
    public TipoAtividadeService getTipoAtividadeService() {
        if (tipoAtividadeService == null) {
            tipoAtividadeService = new TipoAtividadeService();
        }
        return tipoAtividadeService;
    }


    // Util
    public void model() {
    }
}
